
void ByteArray::write(const void* buf, size_t size) {
    if(size == 0) {
        return;
    }
    addCapacity(size);

    size_t npos = m_position % m_baseSize; /当前node已经写到了的位置
    size_t ncap = m_cur->size - npos; //当前的node还剩余的空间
    size_t bpos = 0;//bps表示在write 函数中已经写了多长

    while(size > 0) {
        if(ncap >= size) {// 当前node的剩余空间大于要写的长度的时候 
            memcpy(m_cur->ptr + npos, (const char*)buf + bpos, size); // 将数据从当前node已经写到了的位置开始copy,copy  from    {buf + 已经读了的位置 } ，长度是size
            if(m_cur->size == (npos + size)) {
                m_cur = m_cur->next;
            }
            m_position += size;  //position变更
            bpos += size;//bpos变更  尽管这个时候似乎已经用不到了
            size = 0;
        } else {
            memcpy(m_cur->ptr + npos, (const char*)buf + bpos, ncap); // 将当前node写完
            m_position += ncap;
            bpos += ncap;
            size -= ncap;
            m_cur = m_cur->next;
            ncap = m_cur->size;
            npos = 0;
        }
    }

    if(m_position > m_size) {
        m_size = m_position;
    }
}